<script type="text/javascript">
'use strict'
	// 第一种函数定义方式
	function abs(x) {
		if (x >= 0) {
			return x;
		} else {
			return -x;
		}
	}
	// 第二中函数定义方式, 直接赋值给变量, 这种方式需要函数末尾需要封号, 表示赋值结束
	var abs = function (x) {
		if (x >= 0) {
			return x;
		} else {
			return -x;
		}
	};
	console.log(abs(-9))
	// 加 判断传入的参数类型
	function abs(x) {
		if (typeof x !== 'number') {
			throw 'Not a number';
		}
		if (x >= 0) {
			return x;
		} else {
			return -x;
		}
	}
	abs('aaa');
	console.log(abs(1));

	// 求和, 随机参数个数
	var i, args = [];
	
	for (i=1; i<=100; i++) {
		args.push(i);
	}
	console.log(args);

	function sum(...rest) {
		if (rest.lenght == 0) {
			return 0;
		} else {
			var arg, result = 0;
			for (arg of rest) {
				if (typeof arg !== 'number') {
					continue;
				}
				result += arg;
			}
			return result;
		}
	}
	if (sum() !== 0) {
		console.log('测试失败: sum() = ' + sum());
	} else if (sum(1) !== 1) {
		console.log('测试失败: sum(1) = ' + sum(1));
	} else if (sum(2,3) !== 5) {
		console.log('测试失败: sum(2,3) = ' + sum(2,3));
	} else if (sum.apply(null, args) !== 5050) {
		console.log('测试失败: sum(1,2,3,...,100) = ' + sum.apply(null, args));
	} else {
		console.log('测试通过')
	}
	console.log(sum.apply(null, args));

</script>